package com.augurit.smartform.service;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

import com.augurit.common.entity.SysMetaTable;
import com.augurit.smartform.database.Table;
import com.augurit.smartform.database.change.ColumnChangeInfo;
import com.augurit.smartform.database.change.CopyDataInfo;
import com.augurit.smartform.display.PageElement;
import com.augurit.smartform.entity.SmPage;

public interface ISmartFormService {
	/**
	 * 根据名称从数据库中查询最新的表单
	 * @param name
	 * @return
	 * cuigeqiang
	 */
	public SysMetaTable getLastedSmFormByName(String name);
	
	/**
	 * 创建表、序列、约束和添加共用表记录
	 * @param table
	 * cuigeqiang
	 */
	public void executeCreateAny(Table table);
	
	/**
	 * 拷贝表数据和序列
	 * @param copyDataInfo
	 * cuigeqiang
	 */
	public void executeCopyData(CopyDataInfo copyDataInfo);
	
	/**
	 * 删除表、序列、约束和添加共用表记录
	 * @param table
	 * cuigeqiang
	 */
	public void executeDropAny(Table table);
	
	/**
	 * 给数据库表增加列
	 * @param columnChangeInfo
	 * cuigeqiang
	 */
	public void executeAddColumn(ColumnChangeInfo columnChangeInfo);
	
	/**
	 * 删除数据库表列
	 * @param columnChangeInfo
	 * cuigeqiang
	 */
	public void executeDelColumn(ColumnChangeInfo columnChangeInfo);
	
	/**
	 * 重命名数据库列
	 * @param columnChangeInfo
	 * cuigeqiang
	 */
	public void executeRenameColumn(ColumnChangeInfo columnChangeInfo);
	
	/**
	 * 修改数据库列长度、精度、标度、默认值、是否为空、唯一键、索引等信息
	 * @param columnChangeInfo
	 * cuigeqiang
	 */
	public void executeModifyColumn(ColumnChangeInfo columnChangeInfo);
	
	/**
	 * 查询相同页面名称的数量
	 * @param name
	 * @return
	 * cuigeqiang
	 */
	public long countPagesByName(String name);
	
	/**
	 * 保存转换页面的相关数据
	 * @param page
	 * cuigeqiang
	 */
	public SmPage savePage(PageElement page);
	
	/**
	 * 根据ID找到JSP的路径
	 * @param pageId
	 * @return
	 * cuigeqiang
	 */
	public String getJspPath(String pageId);
	
	/**
	 * 根据PAGECODE找到JSP的路径
	 * @param pageId
	 * @return
	 * cuigeqiang
	 */
	public String getJspPathByPageCode(String pageCode);
	
	/**
	 * 查询数据库中保存的最新版本的XML文件
	 * @param table
	 * @return
	 * cuigeqiang
	 */
	public String getOldXml(Table table);
	
	/**
	 * 通过FORMID得到所有字段
	 * @param formId
	 * @return
	 * cuigeqiang
	 */
	public List<Map> getAllFieldByFormId(String formIdStr);
	
	/**
	 * 根据名称从数据库中查询所有版本的表单
	 * @param name
	 * @return
	 * cuigeqiang
	 */
	public List<SysMetaTable> getAllSmFormByName(String name);
	
	/**
	 * 删除所有版本的表单数据库结构
	 * @param name
	 * cuigeqiang
	 */
	public void deleteAllSmFormByName(String name);
	
	/**
	 * 通过PAGECODE查询SMPAGE
	 * @param pageCode
	 * @return
	 * cuigeqiang
	 */
	public SmPage getSmPageByPageCode(String pageCode);
	
	/**
	 * 通过PAGEID查询SMPAGE
	 * @param pageId
	 * @return
	 * cuigeqiang
	 */
	public SmPage getSmPageByPageId(String pageId);
	
	/**
	 * 得到所有版本的智能表单
	 * @return
	 * cuigeqiang
	 */
	public List<SysMetaTable> getAllLastedSmartForms();
	
	/**
	 * 检查有字段变动时更新SysMetaTable
	 * @param columnChangeInfo
	 * cuigeqiang
	 */
	public void updateSysMetaTable(ColumnChangeInfo columnChangeInfo);
	
	/**
	 * 根据ColumnChangeInfo更新SysMetaColumn
	 * @param columnChangeInfo
	 * cuigeqiang
	 */
	public void updateSysMetaColumn(ColumnChangeInfo columnChangeInfo);
	
	/**
	 * 找到当前发布的表单
	 * @param sourceXml
	 * @return
	 * cuigeqiang
	 */
	public Table getCurrentTable(String sourceXml);
	
	/**
	 * 找到当前发布的表单
	 * @param sourceXml
	 * @param deepTables
	 * @return
	 */
	public Table getCurrentTable(String sourceXml,List<Table> deepTables);
	
}
